package br.unesp.rc.lcpjcontacts.model.dao;

import br.unesp.rc.lcpjcontacts.exceptions.GrupoInexistenteException;
import br.unesp.rc.lcpjcontacts.model.bean.GrupoList;
import br.unesp.rc.lcpjcontacts.model.bean.Pessoa;


/**
 * A Interface GrupoListDAO.
 */
public interface GrupoListDAO {

    /**
     * Obtem a lista de grupos.
     *
     * @return a lista de grupos
     */
    public GrupoList getListaDeGrupos();

    /**
     * Criar grupo.
     *
     * @param nomeGrupo o nome do grupo
     * @param pessoa a pessoa
     */
    public void criarGrupo(String nomeGrupo, Pessoa pessoa);

    /**
     * Adicionar pessoa a grupo default.
     *
     * @param pessoa a pessoa para adicionar
     */
    public void adicionarPessoaAGrupoDefault(Pessoa pessoa);

    /**
     * Adicionar pessoa a grupo.
     *
     * @param nomeGrupo o nome do grupo
     * @param pessoa a pessoa para adicionar
     */
    public void adicionarPessoaAGrupo(String nomeGrupo, Pessoa pessoa);

    /**
     * Atualizar pessoa do grupo.
     *
     * @param pessoa a pessoa para atualizar
     * @throws GrupoInexistenteException exception de grupo inexistente
     */
    public void atualizarPessoaDoGrupo(Pessoa pessoa)
            throws GrupoInexistenteException;

    /**
     * Obter indice grupo por nome.
     *
     * @param grupoList a lista de grupo
     * @param grupoNome o nome do grupo
     * @return o indice do grupo por nome
     */
    public int obterIndiceGrupoPorNome(GrupoList grupoList, String grupoNome);

    /**
     * Remover pessoa de grupos.
     *
     * @param idPessoa id da Pessoa
     * @return true, se tiver exito
     */
    public boolean removerPessoaDeGrupos(Long idPessoa);

    /**
     * Remover grupo.
     *
     * @param nomeGrupo Nome do Grupo
     * @throws GrupoInexistenteException exception de grupo inexistente
     */
    public void removerGrupo(String nomeGrupo) throws GrupoInexistenteException;

    /**
     * Remover pessoa de um grupo.
     *
     * @param idPessoa o id pessoa para remover
     * @param nomeGrupo nome do grupo onde a pessoa deve ser excluida
     * @return true, se tiver exito
     */
    public boolean removerPessoaDeGrupo(Long idPessoa, String nomeGrupo);
}